<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>slot-作用域插槽的案例</title>
</head>

<body>
    <!-- 
        需求：
            子组件包含一组数据：比如：PLanguages:['JavaScript','python','Swift','Go','C++']
            需要在多个界面进行展示：
                某些界面是以水平方向--展示的，某些界面是以列表形式展示的，某些界面直接展示数组，
            内容在子组件，希望父组件告诉我们如何展示？
                利用slot作用域插槽解决
     -->
    <div id="app">
        <cpn></cpn>
        <cpn>
            <!-- 父组件无法直接使用子组件数据 -->
            <!-- <span v-for="item in planguaues"></span> -->
            
            <!-- 获取子组件的PLanguages -->
            <div slot-scope='slot'>
                <span v-for="item in slot.data">{{item}} - </span>
                <br>
                <span v-for="item in slot.data">{{item}} * </span>
                <br>
                <span>{{slot.data.join(' - ')}}</span>
                <br>
                <span>{{slot.data.join(' * ')}}</span>
            </div>
        </cpn>
        <cpn></cpn>
    </div>
    <template id="cpn">
        <div>
            <!-- 默认列表显示 -->           
            <slot :data="pLanguages"><!-- 将子组件数据传递过去 data为自定义名 -->
                <ul>
                    <li v-for="item in pLanguages">{{item}}</li>
                </ul>
            </slot>
        </div>
    </template>
    <script src="./js/vue.min.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                message: 'hello'
            },
            components: {
                cpn: {
                    template: '#cpn',
                    data() {
                        return {
                            pLanguages: ['JavaScript', 'python', 'Swift', 'Go', 'C++', 'PHP', 'JAVA']
                        }
                    },
                    props: {

                    }

                }
            }
        })
    </script>
</body>

</html>